package springbootmybatis.demo.util;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

/**
 * 页面数据 封装 Map 工具类
 */
@SuppressWarnings("all")//忽略警告
public class PageData extends HashMap implements Map{
	
	private static final long serialVersionUID = 1L;
	Map map = null;
	HttpServletRequest request = null;
	
	public PageData() {
		map = new HashMap();
	}
	
	/**
	 * 构造器 获取 request 请求 map 集合
	 * @param request 
	 * 			HttpServletRequest
	 */
	public PageData(HttpServletRequest request) {
		//页面传递 后台的参数 name 和 value
		String name = "";
		String value = "";
		
		//创建 Map 内部类 Entry Entry类可以提供 getKey getValue 方法
		Map.Entry entry;
		
		this.request = request;
		//获取请求参数 Map 形式
		Map parameterMap = request.getParameterMap();
		Map returnMap = new HashMap();
		//获取 parameterMap 集合中的迭代器并赋值创建新 迭代器
		Iterator iterator = parameterMap.entrySet().iterator();
		
		//循环 获取迭代器数据
		while(iterator.hasNext()) {
			entry = (Map.Entry) iterator.next();
			
			//获取参数的 name 值
			name = (String) entry.getKey();
			//获取参数 name 相对应的 value 值
			Object valueObject = entry.getValue();
			
			//控制判断
			if(null == valueObject) {
				value = "";
			}else if(valueObject instanceof String[]/*判断类型*/) {
				String[] arrayValue = (String[])valueObject;
				for(int i = 0; i < arrayValue.length ; i++) {
					value = arrayValue[i] +",";
				}
				value = value.substring(0, value.length()-1);
			}else {
				value = valueObject.toString();
			}
			returnMap.put(name, value);
		}
		returnMap.put("IP", IPUtils.getIP(this.request));
		map = returnMap;
	}
	
	/**
	 * 获取 map 中的数据
	 * @param Key 键
	 */
	@Override
	public Object get(Object key) {
		Object obj = null;
		if(map.get(key) instanceof Object[]/*判断类型*/) {
			Object[] arr = (Object[])map.get(key);
			if(null == request) {
				//request 对象 为空 将 map 中值赋值给 obj 对象
				obj = arr;
			}else if(null == request.getParameter((String)key)/*判断值*/) {
				//request 对象 为空 将 map 中值赋值给 obj 对象
				obj = arr;
			}else {
				obj = arr[0];
			}
		} else {
			obj = map.get(key);
		}
		return obj;
	}
	
	public String getString(Object key) {
		return (String) map.get(key);
	}
	
	public Integer getInteger(Object key) {
		return (Integer) map.get(key);
	}
	
	public BigDecimal getBigDecimal(Object key) {
		return (BigDecimal) map.get(key);
	}
	
	/**
	 * 存入 map 数据
	 * @param Key 键
	 * @param value 值
	 */
	@Override
	public Object put(Object key, Object value) {
		return map.put(key, value);
	}
	
	/**
	 * 移除 map 数据 
	 * @param Key 键
	 */
	@Override
	public Object remove(Object key) {
		return map.remove(key);
	}
	
	/**
	 * 清除 Map
	 */
	public void clear() {
		map.clear();
	}
	
	/**
	 * 获取长度
	 * @return int
	 */
	public int getSize() {
		return map.size();
	}
}
